home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung / Power-Programmierung (Tewi)(1994).iso / magazine / pcmagazi / 1988 / 18 / ctrlcap.asm next >
Assembly Source File  |  1988-08-01  |  3KB  |  80 lines

  1. ;----------------------------------------------------------------------
  2. ;  CTRLCAP - Reverse the CapsLock and Ctrl key on left side.
  3. ;       MASM CTRLCAP;
  4. ;       LINK CTRLCAP;
  5. ;       EXE2BIN CTRLCAP.EXE CTRLCAP.COM
  6. ;----------------------------------------------------------------------
  7. CSEG    SEGMENT PARA PUBLIC 'CODE'
  8.         ASSUME  CS:CSEG                         ;Not sure of DS when resident
  9.  
  10.                 ORG     100H                    ;SKIP TO END OF THE PSP
  11. ENTPT:          JMP     SHORT INITIALIZE        ;COM FILE ENTRY ALWAYS AT 100H
  12.  
  13.         ;Change these codes to change two other keys
  14. CTRL_DN         EQU     01DH                    ;Make for Ctrl
  15. CAP_DN          EQU     03AH                    ;Make for CapsLock
  16.  
  17. COPYRIGHT       DB      "CTRLCAP 1.0 (c) 1988, Ziff Communications Corp."
  18.                 DB      13,10,"PC Magazine ",254," Robert L. Hummel"
  19.  
  20. NEW_INT         PROC    FAR                     ;Here is the new interrupt
  21.  
  22.                 PUSHF                           ;Save flags
  23.                 CMP     AH,04FH                 ;If Kbd intercept fn
  24.                 JE      SWAP_0                  ; jump
  25.                 POPF                            ;Restore flags
  26.                 JMP     SHORT SPLICE            ;Continue to original
  27. SWAP_0:
  28.                 POPF                            ;Discard flags
  29.                 PUSH    AX                      ;Save scan code
  30.                 AND     AL,07FH                 ;Eliminate high bit
  31.  
  32.                 CMP     AL,CTRL_DN              ;If not Ctrl key
  33.                 JNE     SWAP_1                  ; jump
  34.  
  35.                 POP     AX                      ;Restore scan code
  36.                 ADD     AL,(CAP_DN-CTRL_DN)     ; and change to other value
  37.                 JMP     SHORT SWAP_EXIT         ;Leave
  38. SWAP_1:
  39.                 CMP     AL,CAP_DN               ;If not CapsLock
  40.                 POP     AX                      ; (restore scan code)
  41.                 JNE     SWAP_EXIT               ; then process normal
  42.  
  43.                 SUB     AL,(CAP_DN-CTRL_DN)     ; else adjust value
  44. SWAP_EXIT:
  45.                 STC                             ;Carry on=keep keystroke
  46. SPLICE:
  47.                 DB      0EAH                    ;JMP FAR
  48. OLD_INT         DD      0                       ; old interrupt 15h
  49.  
  50. NEW_INT         ENDP
  51.  
  52. ;======================================================================
  53. ;       Initialization Procedure
  54. ;----------------------------------------------------------------------
  55. INITIALIZE      PROC    NEAR
  56.                 ASSUME  DS:CSEG                 ;Set by loader.
  57.  
  58.                 MOV     AH,9                    ;Display string fn
  59.                 MOV     DX,OFFSET COPYRIGHT
  60.                 INT     21H
  61.  
  62.                 MOV     AX,3515H                ;Get current interrupt 15h
  63.                 INT     21H                     ;Result in ES:BX
  64.  
  65.                 MOV     WORD PTR OLD_INT[0],BX  ;Save offset
  66.                 MOV     WORD PTR OLD_INT[2],ES  ;Save segment
  67.  
  68.                 MOV     AX,2515H                ;Set interrupt 15h
  69.                 MOV     DX,OFFSET NEW_INT       ;Load DS:DX with our interrupt
  70.                 INT     21H
  71.  
  72.                 MOV     AX,3100H                ;Terminate & stay resident
  73.                 MOV     DX,(OFFSET INITIALIZE-OFFSET CSEG + 15) SHR 4
  74.                 INT     21H
  75.  
  76. INITIALIZE      ENDP
  77.  
  78. CSEG    ENDS
  79.         END     ENTPT
  80.